rm(list = ls(all = TRUE)) #clear workspace
setwd("~/Dropbox/REDISTRICTING/DISTRITACION 12-13/Eleccion_2012")

#Computos distritales 2012
#-------------------------
source("01_Computos_Distritales.R")
#Verificar que corresponde con los resultados oficiales
lapply(data, sum)

#Escenario de redistritacion 2013
#-------------------------
source("02_Genera_escenario.R")
#Verificar que el numero de distritos por estado es correcto
lapply(escenario, length)
#Convertir a data frame
library(plyr)
escenario <- ldply(1:length(escenario),
                   function(x) ldply(1:length(escenario[[x]]),
                   function(y) cbind(ID_ESTADO=x, DISTRITO.13=y, SECCION=escenario[[x]][[y]])))
#Aplicar afectaciones a secciones para homologar con eleccion 2012
source("03_Afectaciones_Seccionales.R")

#Merge eleccion con escenario
#-------------------------
data <- merge(data, escenario, by=c("ID_ESTADO","SECCION"), all.x=TRUE)
#Verificar que corresponde con los resultados oficiales
lapply(data, sum)

#Resultados con distritacion 2013
#--------------------------------
tmp <- data.frame(PAN=data$PAN,
                  PRI=data$PRI*is.na(data$PRI.PVEM), #"no hubo coal"
                  PVEM=data$PVEM*is.na(data$PRI.PVEM), #"no hubo coal"
                  CPM=rowSums(data[,c("PRI","PVEM","PRI.PVEM")])*!is.na(data$PRI.PVEM),
                  MP=data$MP,
                  PANAL=data$PANAL,
                  is.COAL=!is.na(data$PRI.PVEM), # Para calcular secciones con coalicion por distrito
                  tot.secc=1) # Para calcular total de secciones por distrito

#Agregar por distrito 2013
data.2013 <- aggregate(tmp, by=data[c("ID_ESTADO", "DISTRITO.13")],sum, na.rm=TRUE)

###Nuevos distritos con mezclas de secciones con/sin coalicion 
#(12 DISTRITOS, pero solo 4 con valores intermedios)
foo <- data.2013[data.2013$is.COAL!=0 & data.2013$is.COAL!=data.2013$tot.secc,]
cbind(foo, prop=round(foo$is.COAL/foo$tot.secc,2))
#Asignar votos de coalicion:
asigna <- function(x) {
  if (x["is.COAL"]/x["tot.secc"] >= .5) { #Si la mayoria de secciones son de coalicion...
    x["CPM"] <- x["PRI"]+x["PVEM"]+x["CPM"]
    x["PRI"] <- 0
    x["PVEM"] <- 0
  }
  else { #Si es menor a .5...
    x["PRI"] <- x["PRI"] + round(x["CPM"]/2)
    x["PVEM"] <- x["PVEM"] + round(x["CPM"]/2)
    x["CPM"] <- 0
  }
  return(x)
}
fixed.data.2013 <- as.data.frame(t(apply(data.2013, 1, asigna)))

#En cuantos distritos nuevos "hubo" coalicion?
sum(fixed.data.2013$CPM!=0)

#Ganador
#-------------------------
ganador.2013 <- apply(fixed.data.2013[,c("PAN","PRI","PVEM","CPM","MP","PANAL")], 1, 
                      function(x) names(which.max(x)))
table(ganador.2013)

tab.13 <- cbind(
  PAN=by(ganador.2013, fixed.data.2013$ID_ESTADO, function(x) sum(x=="PAN")),
  PRI=by(ganador.2013, fixed.data.2013$ID_ESTADO, function(x) sum(x=="PRI")),
  PVEM=by(ganador.2013, fixed.data.2013$ID_ESTADO, function(x) sum(x=="PVEM")),
  CPM=by(ganador.2013, fixed.data.2013$ID_ESTADO, function(x) sum(x=="CPM")),  
  MP=by(ganador.2013, fixed.data.2013$ID_ESTADO, function(x) sum(x=="MP"))
)
addmargins(tab.13)

#Write.table
write.table(cbind(fixed.data.2013[,c("ID_ESTADO","DISTRITO.13")],
                  GANADOR=ganador.2013),
            file="out.distritacion.2013.txt", sep=",", row.names=FALSE)

#----------------------------------------------------------------------
#
#Con distritacion 2005 (para fines comparativos por estado)
#
#----------------------------------------------------------------------
data.2012 <- read.table("DIPUTADOS_2012.txt", header=TRUE, sep="\t")
data.2012 <- data.frame(ID_ESTADO=data.2012$ENTIDAD.FEDERATIVA,
                        DISTRITO.12=data.2012$DISTRITO,
                        PAN=data.2012$PAN,
                        PRI=data.2012$PRI*(data.2012$COALICION.PRI.PVEM==0), #"no hubo coal"
                        PVEM=data.2012$PVEM*(data.2012$COALICION.PRI.PVEM==0), #"no hubo coal"
                        CPM=rowSums(data.2012[,c("PRI","PVEM","COALICION.PRI.PVEM")])*(data.2012$COALICION.PRI.PVEM!=0),
                        MP=rowSums(data.2012[,c("PRD","PT","MOVIMIENTO.CIUDADANO","COALICION.PRD.PT.MC","COALICION.PRD.PT","COALICION.PRD.MC","COALICION.PT.MC")]),
                        PANAL=data.2012$NUEVA.ALIANZA)
#En cuantos distritos hubo coalicion?
sum(data.2012$CPM!=0)

#Ganador
#-------------------------
ganador.2012 <- apply(data.2012[,c("PAN","PRI","PVEM","CPM","MP","PANAL")], 1, 
                      function(x) names(which.max(x)))
table(ganador.2012)

tab.12 <- cbind(
  PAN=by(ganador.2012, data.2012$ID_ESTADO, function(x) sum(x=="PAN")),
  PRI=by(ganador.2012, data.2012$ID_ESTADO, function(x) sum(x=="PRI")),
  PVEM=by(ganador.2012, data.2012$ID_ESTADO, function(x) sum(x=="PVEM")),
  CPM=by(ganador.2012, data.2012$ID_ESTADO, function(x) sum(x=="CPM")),  
  MP=by(ganador.2012, data.2012$ID_ESTADO, function(x) sum(x=="MP"))
)
addmargins(tab.12)

#Write.table
write.table(cbind(data.2012[,c("ID_ESTADO","DISTRITO.12")],
                  GANADOR=ganador.2012),
            file="out.distritacion.2012.txt", sep=",", row.names=FALSE)

cbind(table(ganador.2012), table(ganador.2013))

